List.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { LevelInfoItem } from "@/api/user";
  2. import { VipRewardTypeMap } from "@/enums";
  3. import clsx from "clsx";
  4. import React from "react";
  5. import styles from "./page.module.scss";
  6. interface Props {
  7. data: LevelInfoItem[];
  8. level: number;
  9. config?: any;
  10. }
  11. const List: React.FC<Props> = ({ data, level = 0, config = {} }) => {
  12. console.log(VipRewardTypeMap);
  13. const DataList = React.useMemo(() => {
  14. const result: any = [];
  15. if (config?.is_level_up_reward) {
  16. result.push({
  17. key: "upgrade",
  18. text: "Upgrade",
  19. render(itemData: LevelInfoItem) {
  20. return itemData?.reward[0]?.amount || 0;
  21. },
  22. });
  23. }
  24. if (config?.is_daily_reward) {
  25. result.push({
  26. key: "day",
  27. text: "Daily",
  28. render(itemData: LevelInfoItem) {
  29. return `${itemData.daily_reward_num}(${config?.is_daily_double_reward ? `${itemData.daily_reward_multiple_num}` : ""}`;
  30. },
  31. });
  32. }
  33. if (config?.is_weekly_reward) {
  34. result.push({
  35. key: "week",
  36. text: "Weekly",
  37. render(itemData: LevelInfoItem) {
  38. return `${itemData.weekly_reward_num}(${config?.is_weekly_double_reward ? `${itemData.weekly_reward_multiple_num}` : ""}`;
  39. },
  40. });
  41. }
  42. if (config?.is_monthly_reward) {
  43. result.push({
  44. key: "month",
  45. text: "Monthly",
  46. render(itemData: LevelInfoItem) {
  47. return `${itemData.monthly_reward_num}(${config?.is_monthly_double_reward ? `${itemData.monthly_reward_multiple_num}` : ""}`;
  48. },
  49. });
  50. }
  51. result.push({
  52. key: "spin",
  53. text: "Spin",
  54. render(itemData: LevelInfoItem) {
  55. return `${itemData?.spin}%`;
  56. },
  57. });
  58. if (config?.is_first_bankruptcy) {
  59. result.push({
  60. key: "bankruptcy",
  61. text: "Bankruptcy",
  62. render(itemData: LevelInfoItem) {
  63. return `${itemData.first_bankruptcy_reward_num}(${config?.is_second_bankruptcy ? `${itemData.second_bankruptcy_reward_num}` : ""}`;
  64. },
  65. });
  66. }
  67. return result;
  68. }, [data, config]);
  69. return (
  70. <div className={"px-[10px]"}>
  71. <div className="flex rounded-[var(--borderRadius)] bg-[#fff]">
  72. <div className={clsx(styles.ListItemBox)}>
  73. <div>Level</div>
  74. {!!data?.length &&
  75. data.map((item) => {
  76. return (
  77. <div
  78. key={item.id}
  79. className={clsx({
  80. "text-[red]": item.id == level,
  81. })}
  82. >
  83. Vip{item.id}
  84. </div>
  85. );
  86. })}
  87. </div>
  88. <div className="flex min-w-[0] flex-1 overflow-auto">
  89. {DataList.map((item: any) => {
  90. return (
  91. <div key={item.key} className={clsx(styles.ListItemBox)}>
  92. <div>{item.text}</div>
  93. {!!data?.length &&
  94. data.map((citem: any) => {
  95. return (
  96. <div
  97. className={clsx({
  98. "text-[red]": citem.id == level,
  99. })}
  100. key={citem.id}
  101. >
  102. {!!item.render && item.render(citem)}
  103. </div>
  104. );
  105. })}
  106. </div>
  107. );
  108. })}
  109. </div>
  110. </div>
  111. </div>
  112. );
  113. };
  114. export default List;